home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
626-637
/
disk_633
/
galer
/
source
/
sub.c
< prev
Wrap
C/C++ Source or Header
|
1992-05-06
|
6KB
|
270 lines
/****************************************************************/
/* */
/* Sub.c - dieses Modul enthält Unterroutinen für den GALer */
/* */
/* compilieren: cc sub.c */
/* */
/****************************************************************/
#include "exec/types.h"
#include "libraries/dos.h"
#include "libraries/dosextens.h"
#include "exec/memory.h"
#include "intuition/intuition.h"
#include "functions.h"
#include "GALer.h"
#define YES_GADID 1
#define NO_GADID 2
#define STR_GADID 3
extern struct Window *window;
extern struct RastPort *rp;
int ytxt = 160; /*Startpos. für PrintText*/
UBYTE ErrorLineStr[] = {"Fehler in Zeile ....:"};
SHORT BorderVectorsR[] = {0,0,82,0,82,14,0,14,0,0};
SHORT BorderVectorsS[] = {0,0,257,0,257,9,0,9,0,0};
struct Border BorderR = {-1,-1,1,0,JAM1,5,BorderVectorsR,NULL};
struct Border BorderS = {-1,-1,1,0,JAM1,5,BorderVectorsS,NULL};
struct IntuiText ITextN = {2,0,JAM1,14,3,NULL,(UBYTE *)"Abbruch",NULL};
struct IntuiText ITextY = {2,0,JAM1,16,3,NULL,NULL,NULL};
struct Gadget GadgetN = {NULL,206,53,81,13,NULL,RELVERIFY,
BOOLGADGET+REQGADGET,
(APTR)&BorderR,NULL,&ITextN,NULL,NULL,NO_GADID,NULL};
struct Gadget GadgetY = {&GadgetN,26,53,81,13,NULL,RELVERIFY,
BOOLGADGET+REQGADGET,
(APTR)&BorderR,NULL,&ITextY,NULL,NULL,YES_GADID,NULL};
UBYTE GadgetSBuff[60];
struct StringInfo StrSInfo = {GadgetSBuff,NULL,0,60,
0,0,0,0,0,0,0,0,NULL };
struct Gadget GadgetS = {&GadgetY,28,34,260,8,NULL,
RELVERIFY+STRINGCENTER,STRGADGET+REQGADGET,
(APTR)&BorderS,NULL,NULL,NULL,
(APTR)&StrSInfo,3,NULL };
struct IntuiText ITextW = {2,0,JAM1,19,15,NULL,NULL,NULL};
struct Requester req = {NULL,170,40,310,76,0,0,
&GadgetS,NULL,&ITextW,
NULL,3,NULL,NULL,NULL };
/* MyRequest:
öffnet einen Requester und wartet auf die Antwort
Aufruf: antwort=MyRequest(mode,text);
mode: ASK_REQ : Requester mit Weiter/Abbruch-Gadgets
SAVE_REQ: Requester mit SAVE/Abbruch-Gadgets
LOAD_REQ: Requester mit LOAD/Abbruch-Gadgets
INFO_REQ: Requester ohne Gadgets (wird automatisch geschlossen)
text: Zeiger auf Requester-Text
antwort: 0=Abbruch oder Fehler, 1=Bestätigung
*/
MyRequest(mode,text)
int mode;
UBYTE *text;
{
struct IntuiMessage *imsg;
int looping;
ULONG class;
USHORT gadID;
ITextW.LeftEdge=(SHORT)(155-strlen(text)*8/2);
ITextW.IText=text;
switch (mode) {
case ERR_REQ: {
req.ReqGadget=&GadgetY;
ITextY.IText=(UBYTE *)"Abbruch";
break;
}
case ASK_REQ: {
req.ReqGadget=&GadgetY;
ITextY.IText=(UBYTE *)"Weiter";
break;
}
case LOAD_REQ: {
req.ReqGadget=&GadgetS;
ITextY.IText=(UBYTE *)" LOAD";
break;
}
case SAVE_REQ: {
req.ReqGadget=&GadgetS;
ITextY.IText=(UBYTE *)" SAVE";
break;
}
case INFO_REQ: {
req.ReqGadget=NULL;
break;
}
}
if (Request(&req,window)) {
if (mode==INFO_REQ) {
WaitForTimer(1L,500000L); /*1.5 Sekunden warten*/
EndRequest(&req,window);
return(1);
}
else {
looping=TRUE;
while (looping) {
imsg = (struct IntuiMessage *) GetMsg(window->UserPort);
if (!imsg) WaitPort (window->UserPort);
else {
class=imsg->Class;
if (class==GADGETUP) gadID=((struct Gadget *)imsg->IAddress)->GadgetID;
ReplyMsg(imsg);
if (class==GADGETUP) {
if ((gadID==YES_GADID)||(gadID==STR_GADID)) {
EndRequest(&req,window);
return(1);
}
if (gadID==NO_GADID) {
EndRequest(&req,window);
return(0);
}
}
}
}
}
}
else
return(0);
}
/* FileSize:
gibt die Länge einer Datei zurück
Aufruf: size=FileSize(filename);
filename: Zeiger auf Filenamen
Ergebnis: -1 : File existiert nicht
-2 : kein Speicher für FileInfoBlock
size: Filelänge
*/
FileSize(filename)
UBYTE *filename;
{
struct FileInfoBlock *fib;
struct FileLock *lock;
LONG filesize;
if((lock=(struct FileLock *) Lock(filename,ACCESS_READ))) {
fib=(struct FileInfoBlock *)AllocMem((long)sizeof(struct FileInfoBlock),MEMF_CHIP);
if (fib!=NULL) {
if (Examine(lock,fib))
filesize=fib->fib_Size;
else filesize=-1L;
UnLock(lock);
FreeMem(fib,(long)sizeof(struct FileInfoBlock));
return(filesize);
}
else
return(-2L); /*Mem-Error*/
}
else
return(-1L); /*File existiert nicht*/
}
/* ReadFile
File einlesen
Aufruf: error=ReadFile(filename,filesize,filebuff)
filename: Zeiger auf Filenamen
filesize: Größe der Datei in Bytes
filebuff: Adresse, an die die Datei gelesen werden soll
Ergebnis: error: 1=kein Fehler, 0=Fehler
*/
ReadFile(filename,filesize,filebuff)
UBYTE *filename,*filebuff;
LONG filesize;
{
int actlength;
struct FileHandle *fh;
if ((fh=Open(filename,MODE_OLDFILE))) {
actlength=Read(fh,filebuff,filesize);
Close(fh);
if (actlength==-1L) return(0L);
else return(1L);
}
else
return(0L);
}
/*ErrorReq
gibt zu einer Fehlernummer den entsprechenden Requester aus
Aufruf: ErrorReq(errornum);
errornum: Fehlernummer
*/
ErrorReq(errornum)
int errornum;
{
switch (errornum) {
case 1: { MyRequest(ERR_REQ,(UBYTE*)"kann Datei leider nicht finden!");
break; }
case 2: { MyRequest(ERR_REQ,(UBYTE*)"nicht genug freier Speicher vorhanden!");
break; }
case 3: { MyRequest(ERR_REQ,(UBYTE*)"kann Datei leider nicht laden!");
break; }
case 4: { MyRequest(ERR_REQ,(UBYTE*)"Datei ist leer!");
break; }
case 5: { MyRequest(ERR_REQ,(UBYTE*)"Fehler in Jedec-Datei!");
break; }
case 6: { MyRequest(ERR_REQ,(UBYTE*)"GAL ist NICHT leer!");
break; }
case 7: { MyRequest(ERR_REQ,(UBYTE*)"keine gültigen Pinnamen vorhanden");
break; }
case 8: { MyRequest(ERR_REQ,(UBYTE*)"Datei läßt sich nicht schließen!");
break; }
case 9: { MyRequest(ERR_REQ,(UBYTE*)"falsches GAL eingestellt!");
break; }
}
}
/* PrintText
gibt Text im Text-Feld aus
Aufruf: PrintText(text);
text: Zeiger auf Text
*/
PrintText(text)
UBYTE *text;
{
if (ytxt<190) ytxt+=10;
else ScrollRaster(rp,0L,10L,31L,162L,609L,194L);
Move(rp,40L,(long)ytxt);
Text(rp,text,(long)strlen(text));
}
/*gibt "Fehler in Zeile xyz" aus
Aufruf: PrintErrorLine(line);
line: Zeilennummer
*/
PrintErrorLine(line)
int line;
{
sprintf(&ErrorLineStr[16],"%4d:",line);
PrintText(&ErrorLineStr);
}